package com.jming.jike.util;

import com.jming.jike.common.BusinessException;
import com.jming.jike.config.MinioConfig;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

import static com.jming.jike.enums.FileTypeEnum.IMAGE_FILE;

/**
 * @author jinming.zhang
 * @version 0.0.1
 * @date 2022/04/28
 */
@Component
public class CommonUtils {

    @Resource
    private MinioUtils minioUtils;

    @Resource
    private MinioConfig minioConfig;


    /**
     * 删除原来的图片
     *
     * @param formerImage 原图片名称
     * @param nowImage    现在的图片名称 如果为空, 则直接删除
     * @return boolean
     * @Author jinming.zhang
     * @Date 2022/4/28
     */
    public boolean removeImage(String formerImage, String nowImage) {

        // 如果图片名称不一致 则说明修改了图片信息 删除原来的图片
        if (!formerImage.equals(nowImage)) {
            if (!minioUtils.remove(formerImage, minioConfig.getBucketName())) {
                throw new BusinessException("图片更新失败!");
            }
        }

        return true;
    }

    /**
     * 下载文件
     *
     * @param objectName 文件名称 如果为空, 则默认下载后台配置的文件
     * @param res
     * @return boolean
     * @Author jinming.zhang
     * @Date 2022/4/28
     */
    public void download(String objectName, HttpServletResponse res) {

        minioUtils.download(objectName == null ? minioConfig.getObjectName() : objectName,
                minioConfig.getBucketName(), res);
    }

    /**
     * 上传图片
     *
     * @param file 文件
     * @param imageClassName 图片类名 比如 dish setMeal userAvatar等
     * @return Map<String, String> 返回图片的全路径名跟Url地址 imageName imageUrl
     * @Author jinming.zhang
     * @Date 2022/4/28
     */
    public Map<String, String> uploadImage(MultipartFile file, String imageClassName) {

        // 如果没有bucket, 则创建一个bucket
        if (!minioUtils.makeBucket(minioConfig.getBucketName())) {
            throw new BusinessException("bucket创建失败");
        }

        // 上传图片
        String imageName = minioUtils.upload(minioConfig.getBucketName(), IMAGE_FILE.getDesc() + "/" + imageClassName, file);

        // 拼接图片Url
        String imageUrl = minioConfig.getEndpoint() + "/" + minioConfig.getBucketName() + "/" + imageName;

        Map<String, String> imageMap = new HashMap<>(2);

        imageMap.put("image", imageName);
        imageMap.put("imageUrl", imageUrl);

        return imageMap;
    }

}
